home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / eselect / libs / config.bash next >
Text File  |  2006-04-12  |  3KB  |  119 lines

  1. #!/bin/bash
  2.  
  3. # Copyright (c) 2005 Gentoo Foundation.
  4. # $Id: config.bash.in 243 2005-11-16 22:12:06Z kugelfang $
  5. # This file is part of the 'eselect' tools framework.
  6. #
  7. # eselect is free software; you can redistribute it and/or modify it under the
  8. # terms of the GNU General Public License as published by the Free Software
  9. # Foundation; either version 2 of the License, or (at your option) any later
  10. # version.
  11. #
  12. # eselect is distributed in the hope that it will be useful, but WITHOUT ANY
  13. # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  14. # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License along with
  17. # eselect; if not, write to the Free Software Foundation, Inc., 59 Temple
  18. # Place, Suite 330, Boston, MA  02111-1307  USA
  19.  
  20. # store_config file key value PUBLIC
  21. # Stores a $key/$value pair for given module in $configfile
  22. store_config() {
  23.     # we need at least "module" and "key"
  24.     [[ ${#@} -ge 2 ]] || die
  25.     local configfile=${1} key=${2} value content vars line="" changed=0
  26.     shift 2
  27.     value=${@}
  28.  
  29.     if [[ ! -e ${configfile} ]] ; then
  30.         mkdir -p ${configfile%/*} \
  31.             || die -q \
  32.             "Couldn't create directory ${configfile%/*}"
  33.     fi
  34.     
  35.     store_config_header() {
  36.         echo "# Configuration file for eselect" \
  37.             > ${configfile}
  38.         echo "# This file has been automatically generated." \
  39.             >> ${configfile}
  40.     }
  41.  
  42.     if [[ ! -f ${configfile} ]] ; then
  43.         store_config_header
  44.         echo "${key}=\"${value}\"" \
  45.         >> ${configfile}
  46.         return
  47.     fi
  48.         
  49.     content=$(<${configfile})
  50.  
  51.     if [[ -z ${content[@]} ]] ; then
  52.         store_config_header
  53.         echo "${key}=\"${value}\"" \
  54.         >> ${configfile}.config
  55.         return
  56.     fi
  57.  
  58.     (
  59.         # parse the names of all settings in the file
  60.         for line in ${content[@]} ; do
  61.             [[ ${line/=/} != ${line} ]] || continue
  62.             line=${line/=*/}
  63.             local ${line}=""
  64.             vars=(${vars[@]} ${line})
  65.         done
  66.  
  67.         source ${configfile}
  68.  
  69.         store_config_header
  70.         for var in ${vars[@]} ; do
  71.         if [[ ${var} == ${key} ]] ; then
  72.                 echo "${var}=\"${value}\"" \
  73.                     >> ${configfile}
  74.             changed=1
  75.         else
  76.                 echo "${var}=\"${!var}\"" \
  77.                     >> ${configfile}
  78.         fi
  79.         done
  80.         [[ ${changed} == 1 ]] \
  81.             || echo "${key}=\"${value}\"" \
  82.             >> ${configfile}
  83.     )
  84. }
  85.  
  86. # load_config module key PUBLIC
  87. # Loads $key value from $configfile
  88. load_config() {
  89.     [[ ${#@} -eq 2 ]] || die
  90.     local configfile key value
  91.  
  92.     configfile=${1}
  93.     key=${2}
  94.     [[ ! -e ${configfile} ]] \
  95.         && return 1
  96.     value=$(
  97.         source ${configfile}
  98.         echo ${!key}
  99.     )
  100.     echo ${value}
  101. }
  102.  
  103. # append_config file key item ... PUBLIC
  104. # Appends $item to already stored value of $key in $configfile
  105. # if $item is not already part of $key
  106. append_config() {
  107.     [[ ${#@} -gt 2 ]] || die
  108.     local configfile=${1} key=${2} item oldvalue newvalue
  109.     shift 2
  110.     item="$@"
  111.     oldvalue=$(load_config ${configfile} ${key})
  112.     if ! has ${item} ${oldvalue[@]} ; then
  113.         newvalue=( ${oldvalue[@]} ${item} )
  114.         store_config ${configfile} ${key} ${newvalue[@]}
  115.     fi
  116. }
  117.  
  118. # vim: set sw=4 et sts=4 tw=80 :
  119.